home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / mcomm540.zip / WATCHDOG.C < prev    next >
C/C++ Source or Header  |  1991-01-06  |  3KB  |  68 lines

  1.  
  2. /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3. *                                                                           *
  4. *             W A T C H D O G   F U N C T I O N   F O R   M S C             *
  5. *               Mike Dumdei, 6 Holly Lane, Texarkana TX 75503               *
  6. *                    Requires ASM module --> WDOGHOOK.ASM                   *
  7. *                                                                           *
  8. *       IF YOU USE THE TICKHOOK FUNCTION IN COMMx.LIB AND THIS FUNC-        *
  9. *       TION IN THE SAME PROGRAM YOU MUST UNINSTALL THE HOOKS IN THE        *
  10. *       REVERSE ORDER THAT THEY WERE INSTALLED  !!!!!!!!!!!!                *
  11. *       -------------------------------------------------------------       *
  12. *                                                                           *
  13. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/
  14. #if defined (__TURBOC__)
  15.   #define _dos_getvect  getvect
  16.   #define _dos_setvect  setvect
  17. #endif
  18.  
  19. #if defined(__ZTC__)
  20.   #include <int.h>
  21.   #define INTERRUPT
  22. #else
  23.   #include <dos.h>
  24.   #define INTERRUPT interrupt
  25. #endif
  26.  
  27. #define uint    unsigned int
  28. #define TIMER   0x1C                        /* timer tick interrupt vector */
  29.  
  30. /* these are in the ASM module */
  31. void INTERRUPT far watchdoghook(void);
  32. extern void (INTERRUPT far *oldtimerint)();
  33. extern uint msrportadrs;
  34.  
  35. int watchdogset(int flag, uint combase)
  36. {
  37.     if (flag)                                         /* enabling watchdog */
  38.     {
  39.         if (msrportadrs != 0)
  40.             return (-1);                       /* error if already enabled */
  41.         /* else set pointers and hook into the timer interrupt */
  42.         msrportadrs = combase + 6;       /* point to modem status register */
  43. #if !defined (__ZTC__)
  44.         oldtimerint = _dos_getvect(TIMER);
  45.         _dos_setvect(TIMER, watchdoghook);               /* hook the timer */
  46. #else
  47.         int_getvector(TIMER, (uint *)&oldtimerint, (uint *)(&oldtimerint+2));
  48.         int_setvector(TIMER, (uint)watchdoghook, *(uint *)(&watchdoghook+2));
  49. #endif
  50.         return (0);
  51.     }
  52.     else                                             /* disabling watchdog */
  53.     {
  54.         if (msrportadrs == 0)
  55.             return (-1);                           /* error if not enabled */
  56.         /* else set timer back to original vector & reset comchip var */
  57. #if !defined (__ZTC__)
  58.         _dos_setvect(TIMER, oldtimerint);      /* reset vector to original */
  59. #else
  60.         int_setvector(TIMER, (uint)oldtimerint, *(uint *)(&oldtimerint+2));
  61. #endif
  62.         msrportadrs = 0;
  63.         return (0);
  64.     }
  65. }
  66.  
  67.         
  68.